package com.zmn.plat.services.interfaces.product.tariff;

import java.util.List;

import com.zmn.plat.model.dto.product.ProductTariffRelationDTO;
import com.zmn.plat.model.entity.category.ServCategAndCategTwoQuery;
import com.zmn.plat.model.entity.product.tariff.ProductTariff;
import com.zmn.plat.model.entity.product.tariff.ProductTariffQuery;
import com.zmn.plat.model.vo.product.tariff.ProductTariffExportVO;
import com.zmn.plat.model.vo.product.tariff.ProductTariffVO;

/**
 * 产品故障价格表，每个产品价格表一条数据，配置价格表说明、状态等
 *
 * @author tanbiao
 * @since 2019-11-21 18:57:24
 */
public interface ProductTariffService {
    /**
     * 根据主键查询
     *
     * @param relateId
     *            ID
     * @return
     */
    ProductTariff findByKey(Integer relateId);

    /**
     * 根据价格表ID查询
     *
     * @param tariffId
     *            ID
     * @return
     */
    ProductTariff findByTariffId(Integer tariffId);

    /**
     * 根据id搜索
     *
     * @param ids
     *            产品价格表id集合
     * @return
     */
    List<ProductTariffVO> findByKeys(List<Integer> ids);

    /**
     * 分页搜索
     *
     * @param query
     *            条件
     * @return 列表
     */
    List<ProductTariffVO> listPageByQuery(ProductTariffQuery query);

    /**
     * 搜索
     *
     * @param query
     *            条件
     * @return
     */
    List<ProductTariffVO> listByQuery(ProductTariffQuery query);

    List<ProductTariffVO> listByQueryWithCache(ProductTariffQuery query);

    /**
     * 导出产品价格表数据
     * 
     * @param query
     * @return
     */
    List<ProductTariffExportVO> listExportExcelPageByQuery(ProductTariffQuery query);

    /**
     * 查询服务分类和后台一级分类下配置的产品价格表
     * 
     * @param newTariffId
     * @param servCategId
     * @param categOneId
     * @return
     */
    List<ProductTariff> listByTariffIdAndServCategIdAndCategOneId(Integer newTariffId, Integer servCategId, Integer categOneId);


    /**
     * 查询产品默认价格表
     *
     * @param productIds
     * @param bizType
     * @param general
     * @return
     */
    List<ProductTariffRelationDTO> listByProductIdsAndBizTypeAndGeneral(List<Integer> productIds,  Integer channelId,Integer bizType, Integer general,Integer tariffType,List<ServCategAndCategTwoQuery> servCategAndCategTwoQueryList);

    /**
     * 查询产品价格表对应的产品关系
     *
     * @param productIds
     * @param bizType
     * @param tariffId
     * @return
     */
    List<ProductTariffRelationDTO> listByProductIdsAndBizTypeAndTariffId(List<Integer> productIds, Integer  channelId,Integer bizType, Integer tariffId,List<ServCategAndCategTwoQuery> servCategAndCategTwoQueryList);

    /**
     * 所有数据
     *
     * @return
     */
    List<ProductTariff> listAll();

    /**
     * 统计
     *
     * @param query
     *            条件
     * @return
     */
    Integer countByQuery(ProductTariffQuery query);

    /**
     * 更新状态
     *
     * @param productFaultTariff
     * @return
     */
    Integer updateStatusByKey(ProductTariff productFaultTariff);

    /**
     * 更新状态
     *
     * @param ids
     * @param status
     * @param mcStaffName
     * @return
     */
    Integer updateStatusBatchByKey(List<Integer> ids, Integer status, String mcStaffName);

    /**
     * 更新
     *
     * @param productFaultTariff
     * @return
     */
    Integer updateByKey(ProductTariff productFaultTariff);

    /**
     * 根据产品id或者价格表id更新状态
     *
     * @param productId
     *            产品id，可为空
     * @param tariffId
     *            价格表id，可为空
     * @param status
     *            状态不可为空
     * @return
     */
    Integer updateStatusByProductIdOrTariffId(Integer productId, Integer tariffId, Integer status, String updater);

    /**
     * 根据价格表IDs停用非默认价格表
     * 
     * @param tariffIds
     * @param updater
     * @return
     */
    Integer disableStatusByTariffId(List<Integer> tariffIds, String updater);

    /**
     * 根据产品id或者价格表id更新状态
     *
     * @param tariffIds
     *            价格表id集合
     * @param status
     *            状态不可为空
     * @return
     */
    Integer updateStatusByTariffIds(List<Integer> tariffIds, Integer status, String updater);

    /**
     * 插入
     *
     * @param productFaultTariff
     * @return
     */
    Integer insert(ProductTariff productFaultTariff);

    /**
     * 批量插入
     *
     * @param productFaultTariffList
     * @return
     */
    Integer insertBatch(List<ProductTariff> productFaultTariffList);

    /**
     * 删除
     *
     * @param relateId
     *            ID
     * @return
     */
    Integer deleteByKey(Integer relateId);

    /**
     * 根据服务分组删除
     * 
     * @param tariffId
     * @param servCategId
     * @param categOneId
     * @return
     */
    Integer deleteByTariffIdAndServCategIdAndCategOneId(Integer tariffId, Integer servCategId, Integer categOneId);

}
